//package org.xqp.es;
//
//import org.elasticsearch.action.delete.DeleteRequestBuilder;
//import org.elasticsearch.action.delete.DeleteResponse;
//import org.elasticsearch.action.get.GetRequestBuilder;
//import org.elasticsearch.action.get.GetResponse;
//import org.elasticsearch.action.index.IndexRequestBuilder;
//import org.elasticsearch.action.index.IndexResponse;
//import org.elasticsearch.action.search.SearchRequestBuilder;
//import org.elasticsearch.action.search.SearchResponse;
//import org.elasticsearch.action.update.UpdateRequestBuilder;
//import org.elasticsearch.action.update.UpdateResponse;
//import org.elasticsearch.client.transport.TransportClient;
//import org.elasticsearch.common.settings.Settings;
//import org.elasticsearch.common.transport.InetSocketTransportAddress;
//import org.elasticsearch.index.query.BoolQueryBuilder;
//import org.elasticsearch.index.query.QueryBuilders;
//import org.elasticsearch.search.SearchHit;
//import org.elasticsearch.search.SearchHits;
//import org.elasticsearch.search.sort.SortOrder;
//import org.elasticsearch.transport.client.PreBuiltTransportClient;
//import org.junit.Test;
//
//import java.net.InetAddress;
//import java.net.UnknownHostException;
//import java.util.HashMap;
//import java.util.Map;
//
//
//public class ESTest {
//
//    // 创建一个方法来获取TransportClient
//    private TransportClient getClient(){
//        // 设置
//        Settings settings = Settings.builder()
//                //嗅探
//                .put("client.transport.sniff", true).build();
//        // ES客户端
//        TransportClient client = null;
//        try {
//            client = new PreBuiltTransportClient(settings)
//                    // 一个ES主机
//                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
//        } catch (UnknownHostException e) {
//            e.printStackTrace();
//        }
//        return client;
//    }
//    // 测试索引库并存对象进去
//    @Test
//    public void create() throws UnknownHostException {
//        for (int i =1; i<100; i++){
//            // 获取连接
//            TransportClient client = getClient();
//            // 创建索引
//            IndexRequestBuilder indexRequestBuilder = client.prepareIndex("pethome", "user", i+"");
//            //添加文档
//            HashMap<String, Object> data = new HashMap<>();
//            data.put("id", i);
//            data.put("username", i%2==0?"xqp":"xxx");
//            data.put("realname", i%2==0?"徐桥畔":"嘻嘻嘻");
//            data.put("sex",i%3==0?1:1);
//            data.put("age",i );
//
//            IndexResponse indexResponse = indexRequestBuilder.setSource(data).get();
//            System.out.println(indexResponse);
//        }
//
//    }
//    // 获取存入索引库中的对象
//    @Test
//    public void get(){
//        // 获取连接
//        TransportClient client = getClient();
//        //获取 对象
//        GetRequestBuilder getRequestBuilder = client.prepareGet("pethome", "user", "1");
//        // 获取数据
//        GetResponse getFields = getRequestBuilder.get();
//        // getFields这个对象不能直接打印，我们需要的知识她的数据直接调用她的getSource()方法就好
//        System.out.println(getFields.getSource());
//    }
//    // 修改
//    @Test
//    public void update(){
//        // 获取连接
//        TransportClient client = getClient();
//        UpdateRequestBuilder updateRequestBuilder = client.prepareUpdate("pethome", "user", "1");
//        // 设置修改的内容  把   年龄改了    性别sex取消了  但是sex还在因为他是局部修改  全局修改就先把数据删掉再添加
//        HashMap<String, Object> data = new HashMap<>();
//        data.put("id", 1L);
//        data.put("username", "xqp");
//        data.put("realname", "徐桥畔");
//        data.put("age",25 );
//        UpdateResponse updateResponse = updateRequestBuilder.setDoc(data).get();
//        System.out.println(updateResponse);
//    }
//    // 删除
//    @Test
//    public void delete(){
//        // 获取连接
//        TransportClient client = getClient();
//        // 删除哪个索引库
//        DeleteRequestBuilder deleteRequestBuilder = client.prepareDelete("pethome", "user", "1");
//        // 获取结果是否看是否成功
//        DeleteResponse deleteResponse = deleteRequestBuilder.get();
//        System.out.println(deleteResponse);
//    }
//
//    /**
//     * 综合查询
//     * #dsl查询  查询用户 username为xqp或者xxx       sex为1   age10-50
//     * 按照age排序倒排  查询第一页每页十条数据
//     */
//    @Test
//    public void search(){
//        // 获取连接
//        TransportClient client = getClient();
//        // 指定搜索的索引库
//        SearchRequestBuilder searchBuilder = client.prepareSearch("pethome");
//
//        //排序
//        searchBuilder.addSort("age", SortOrder.DESC); // 根据年龄倒排
//        // 分页
//        // 从第0页开始也就是第一页
//        searchBuilder.setFrom(0);
//        //每页10条数据
//        searchBuilder.setSize(10);
//
//        // 设置查询条件
//        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//
//        boolQueryBuilder.must(QueryBuilders.matchQuery("username", "xqp xxx"));
//        boolQueryBuilder
//                .filter(QueryBuilders.termQuery("sex", 1))
//                .filter(QueryBuilders.rangeQuery("age").gte(10).lte(50));
//
//        // 获取查询结果
//        SearchResponse searchResponse = searchBuilder.setQuery(boolQueryBuilder).get();
//        System.out.println("searchResponse"+searchResponse);
//        // 命中查询的结果  反正想获取到消息就要用这一步==
//        SearchHits hits = searchResponse.getHits();
//
//        // 获取数据总条数
//        long totalHits = hits.getTotalHits();
//        System.out.println("数据总条数"+totalHits);
//
//        //获取结果列表
//        SearchHit[] hits1 = hits.getHits();
//        for (SearchHit searchHit : hits1){
//            // 循环获取数据
//            Map<String, Object> source = searchHit.getSource();
//            System.out.println(source);
//        }
//    }
//
//}
